console.log("popup.js loaded");

// 获取当前活动标签页的URL
async function getCurrentTabUrl() {
    // 查询当前活动的标签页
    let [tab] = await chrome.tabs.query({ active: true, currentWindow: true });
    return tab.url;
}

// 从URL中解析bvid
function parseBvid(url) {
    try {
        const urlObj = new URL(url);
        
        // 处理视频页面URL格式
        if (urlObj.hostname === 'www.bilibili.com' && urlObj.pathname.startsWith('/video/')) {
            // 从路径中提取BV号
            const pathParts = urlObj.pathname.split('/');
            // video后面的部分就是BV号，需要去除可能存在的额外参数
            const bvid = pathParts[2].split('?')[0];
            if (bvid.startsWith('BV')) {
                return bvid;
            }
        }
        
    } catch (error) {
        console.error('URL解析失败:', error);
    }
    return null;
}

// 请求B站API获取视频基本信息
async function fetchVideoInfo(bvid) {
    try {
        const response = await fetch(`https://api.bilibili.com/x/web-interface/view?bvid=${bvid}`, {
            method: 'GET',
            credentials: 'include' // 确保发送凭证
        });

        if (!response.ok) {
            throw new Error(`HTTP error! status: ${response.status}`);
        }

        const data = await response.json();
        console.log('视频信息API响应数据:', data);
        
        if (data.code === 0 && data.data) {
            return data.data;
        } else {
            throw new Error(`API错误: ${data.message}`);
        }
    } catch (error) {
        console.error('获取视频信息失败:', error);
        return null;
    }
}

// 请求B站播放器API获取字幕信息
async function fetchPlayerInfo(aid, cid) {
    try {
        const response = await fetch(`https://api.bilibili.com/x/player/wbi/v2?aid=${aid}&cid=${cid}`, {
            method: 'GET',
            credentials: 'include'
        });

        if (!response.ok) {
            throw new Error(`HTTP error! status: ${response.status}`);
        }

        const data = await response.json();
        console.log('播放器API响应数据:', data);

        if (data.code === 0 && data.data) {
            return data.data;
        } else {
            throw new Error(`播放器API错误: ${data.message}`);
        }
    } catch (error) {
        console.error('获取播放器信息失败:', error);
        return null;
    }
}

// 获取字幕URL
function getSubtitleUrl(playerInfo) {
    try {
        if (playerInfo.subtitle && 
            playerInfo.subtitle.subtitles && 
            playerInfo.subtitle.subtitles.length > 0) {
            const subtitleUrl = playerInfo.subtitle.subtitles[0].subtitle_url;
            console.log('找到字幕URL:', subtitleUrl);
            return subtitleUrl;
        } else {
            console.log('未找到字幕信息');
            return null;
        }
    } catch (error) {
        console.error('解析字幕URL失败:', error);
        return null;
    }
}

// 请求字幕内容
async function fetchSubtitle(subtitleUrl) {
    try {
        // 如果URL不是以http开头，添加https:
        if (!subtitleUrl.startsWith('http')) {
            subtitleUrl = 'https:' + subtitleUrl;
        }

        const response = await fetch(subtitleUrl, {
            method: 'GET',
            // 移除credentials选项，使用默认的same-origin
            headers: {
                'Accept': 'application/json'
            }
        });

        if (!response.ok) {
            throw new Error(`HTTP error! status: ${response.status}`);
        }

        const subtitleData = await response.json();
        console.log('字幕内容:', subtitleData);
        return subtitleData;
    } catch (error) {
        console.error('获取字幕内容失败:', error);
        return null;
    }
}

// 更新显示内容的辅助函数
function updateDisplay(elementId, text) {
    const element = document.getElementById(elementId);
    if (element) {
        element.textContent = element.textContent.split('：')[0] + '：' + text;
    }
}

// 当页面加载时获取并显示URL
document.addEventListener('DOMContentLoaded', async () => {
    try {
        const url = await getCurrentTabUrl();
        // 在页面上显示URL
        updateDisplay('currentUrl', url);
        console.log('当前页面URL:', url);

        // 尝试解析bvid
        const bvid = parseBvid(url);
        if (bvid) {
            updateDisplay('bvidInfo', bvid);
            console.log('解析到的bvid:', bvid);

            // 获取视频信息
            const videoInfo = await fetchVideoInfo(bvid);
            if (videoInfo) {
                const aid = videoInfo.aid;
                const cid = videoInfo.pages[0].cid; // 获取第一个分P的cid
                
                updateDisplay('titleInfo', videoInfo.title);
                updateDisplay('aidInfo', aid);
                updateDisplay('cidInfo', cid);

                // 获取播放器信息
                const playerInfo = await fetchPlayerInfo(aid, cid);
                if (playerInfo) {
                    console.log('获取到播放器信息:', playerInfo);
                    
                    // 获取字幕URL
                    const subtitleUrl = getSubtitleUrl(playerInfo);
                    if (subtitleUrl) {
                        updateDisplay('subtitleUrl', subtitleUrl);
                        
                        // 获取字幕内容
                        const subtitleData = await fetchSubtitle(subtitleUrl);
                        if (subtitleData) {
                            updateDisplay('subtitleStatus', '已获取字幕内容，请查看控制台');
                        }
                    } else {
                        updateDisplay('subtitleStatus', '该视频没有字幕');
                    }
                }
            }
        }
    } catch (error) {
        document.querySelectorAll('.info-item').forEach(item => {
            item.textContent = '获取信息失败';
        });
        console.error('获取信息失败:', error);
    }
});